package code;

public class Process {
	
	//---- Fields
	
    private int id;                   // Vidinis proceso vardas (unikalus proceso numeris)
    SavedRegisters savedRegisters;    // Proceso issaugota procesoriaus busena. Naudojama perduodant valdyma procesui
    ProcessState state;               // Proceso busena 
    private int priority;             // Proceso prioritetas (kuo reiksme didesne, tuo procesas svarbesnis)
    private VirtualMachine vm;        // Nuoroda i procesa vykdancia VM
    public ResourceType res;          // Proceso naudojamas resursas
    
    //---- Methods
    
    
    
    /**
	 * Constructor
	 * @param id
	 * @param priority
	 * @param name
	 * @param vm
	 */
    public Process(int id, int priority, VirtualMachine vm) {
    	this.id = id;
    	this.savedRegisters = new SavedRegisters();
    	this.state = ProcessState.ready;
    	this.priority = priority;
    	this.vm = vm;
    	this.res = null;
    }
    
    /**
	 * Constructor
	 */
    public Process(){
    	state = null;
    	this.savedRegisters = new SavedRegisters();
    }
    
    /**
     * Gaunam proceso id
     * @return id
     */
    public int getId(){
    	return this.id;
    }
    
    /**
     * Gaunam proceso proceso busena
     * @return state
     */
    public ProcessState getState() {
    	return this.state;
    }
    
    /**
     * Gaunam proceso id
     * @return priority
     */
    public int getPriority() {
    	return this.priority;
    }
    
    /**
     * Procesui paskiriam resursa 
     * @param type
     */
    public void setResource(ResourceType type) {
    	res = type;
    }
    
    /**
     * Suzinom procesa aptarnaujancia virtualia masina
     * @return vm
     */
    public VirtualMachine getVM() {
    	return this.vm;
    }
}